package com.appleyk.mybatis.v1.service;

import com.appleyk.mybatis.model.User;
import com.appleyk.mybatis.v1.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>越努力，越幸运</p>
 *
 * @author appleyk
 * @version V.0.1.1
 * @blob https://blog.csdn.net/appleyk
 * @date created on  11:56 下午 2020/12/11
 */
@Service
public class UserService {

    // 注进来，看过spring源码的都知道，这个玩意会在bean填充属性的时候，对userMapper进行赋值
    /**
     * 1.先是bean的newInstance（创建实例，也就是利用反射，先在内存中占个坑）
     * 2.然后开始populateBean的属性（在AbstractAutowireCapableBeanFactory类中）
     * 3.然后开始初始化bean，初始化工作可是又分好多步骤的
     *  3.1 先来调用Bean实现的各种Aware接口（增强bean的）来设置一些属性，比如设置context啊、设置beanFactory啊，这是beanName啊...
     *  3.2 然后开始调用bean的增强器的前置方法（applyBeanPostProcessorsBeforeInitialization）
     *  3.3 再真正执行bean的初始化方法（也就是实现InitializingBean接口的afterPropertiesSet方法来做一些配置工作）
     *  3.4 如果bean有指定自己的InitMethod，则执行自己的，注意，这个自己的是在上一步之后
     *  完成初始化配置工作之后，bean的属性啊、配置啊、上下文对象啊都是有了的，接下来是
     *  3.5 然后就是调用bean增强器的后置处理方法（applyBeanPostProcessorsAfterInitialization）
     * 4.倒数第二步是，当ioc容器销毁时（这个销毁，需要我们手动的调用context.close()），调用bean的destroy方法
     * 5.最后一步是，当ioc容器销毁时，调用bean自定义的destroyMethod
     */

    @Autowired
    private UserMapper userMapper;

    public User findById(Long uid) {
        return userMapper.findById(uid);
    }
}
